#include<iostream>
#include<vector>
using namespace std;

void remove1(vector<int>& v,int index){
	v.erase(v.begin()+index);
}


//这个算法的前提就是在对于顺序要求不高的前提下是可以去使用的
//当我们的算法的要求的顺序变得比较高的时候，这个算法仍然是效率很低的
//就会去趋近于和我们之前使用remove1
void remove2(vector<int>& v,int index){
	//这个地方只需要我们进行一次扫描，把我们想要的数字放到最前面和最后面都是可以的
	//但是在之前的1_方法中这个扫描的方式是翻倍的增长的
	swap(v[index],v.back());
	v.pop_back();
}


void printVector(const vector<int>& v){
	for(int i=0;i<v.size();i++){
		cout<<v[i]<<" ";
	}
	cout<<endl;
}

int main(){
	vector<int> v;
	cout<<"reomve1: ";
	for(int i=0;i<300006;i++){
		v.push_back(i);
	}

	for(int i=0;i<300000;i++){
		remove1(v,4);
	}
	cout<<"结束:"<<endl;

	cout<<"remove2: ";
	for(int i=0;i<300006;i++){
                v.push_back(i);
        }

        for(int i=0;i<300000;i++){
                remove2(v,4);
        }
	cout<<"结束:"<<endl;

	//望周知！！！
	//注意这个地方英雄哥在运行的时候使用了大概了20s的时间
	//这个算法是十分的耗时的，但是我使用linux运行的时候
	//只用了大概是5s左右
	//这样是可以表明在linux运行是快不少的
		
	//printVector(v);



	return 0;
}
